package item76;

/**
 * 第76条：保护性地编写readObject方法
 */
public class Main01 {

    public static void main(String[] args) {

        // 当一个对象被反序列化的时候，对于客户端不应该拥有的对象引用，如果哪个域包含了这样的对象引用，就必须
        // 要做保护性拷贝，这是非常重要的。
        // 不要使用writeUnshared和readUnshared

        // 编写readObject方法的时候，相当于你正在编写一个公有的构造器，无论给它传递什么样的字节流，它都必须产出一个有效的实例。
        // 编写更加健壮的readObject方法：
        // 1.对于对象引用域必须保持为私有的类，要保护性地拷贝这些域中的每个对象。不可变类的可变组件就属于这一类别。
        // 2.对于任何约束条件，如果检查失败，则抛出一个InvalidObjectException异常。这些检查动作应该跟在所有的保护性拷贝之后。
        // 3.如果整个对象图在被反序列化之后必须进行验证，就应该使用ObjectInputValidation接口。
        // 4.无论是直接方式还是间接方法，都不要调用类中任何可被覆盖的方法。
    }

}
